package cn.ant.mqHandle;

import cn.ant.config.RabbitMQConfig;
import cn.ant.entity.MessageSendDTO;
import com.alibaba.fastjson2.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * 生产者类代码
 *
 * @author Anhui AntLaddie <a href="https://juejin.cn/user/4092805620185316">(掘金蚂蚁小哥)</a>
 * @version 1.0
 **/
@Slf4j
@Component
@RequiredArgsConstructor
public class ProducerSend {

    private final RabbitTemplate rabbitTemplate;

    /***
     * 生产者方法
     * @param msg 消息
     */
    public void producerSendMsg(MessageSendDTO msg) {
        // 消息转换为JSON格式并转为字节数组
        byte[] bytes = JSONObject.toJSONString(msg).getBytes(StandardCharsets.UTF_8);
        // 其它的一些信息，用来回调用处
        CorrelationData correlationData = new CorrelationData();
        // 设置id信息，其实默认就是UUID，我们其实可以根据自己设置指定ID信息
        // correlationData.setId("MSG-UID-" + UUID.randomUUID());

        // 生产者一次性发送2个消息：
        // 发送消息A（可以成功发送）
        // rabbitTemplate.convertAndSend(RabbitMQConfig.CONFIRM_EXCHANGE,
        //         RabbitMQConfig.CONFIRM_ROUTING_KEY, bytes, correlationData);
        // 发送消息B（不可以成功发送,交换机不存在）
        // rabbitTemplate.convertAndSend(RabbitMQConfig.CONFIRM_EXCHANGE + "test",
        //         RabbitMQConfig.CONFIRM_ROUTING_KEY, bytes, new CorrelationData());

        //发送消息一次（不可以成功发送,路由key不存在）
        rabbitTemplate.convertAndSend(RabbitMQConfig.CONFIRM_EXCHANGE,
                RabbitMQConfig.CONFIRM_ROUTING_KEY + "test", bytes, correlationData);
    }
}
